﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ZDT.UI.Event
{
    public class InvokeHandler<T>
    {
        public delegate void InvokeHandlerUI(T obj);     //接收处理，涉及UI
        //使用两个变量，第二个只要是界面中的任意控件都行，主要是利用它回到UI线程

        public InvokeHandlerUI OnInvokedUI;  //接收处理函数，涉及UI
        public System.Windows.Forms.Control UICtrol;  //界面中的任意控件 
        //关联的方法 
        public void SetInvokeUserUI(InvokeHandlerUI rh, System.Windows.Forms.Control ctl)
        {
            OnInvokedUI = rh;
            UICtrol = ctl;
        }
        public void Invoke(T state)
        {
            //子线程中需要调用UI中的处理：
            if (OnInvokedUI != null && UICtrol != null)
            {
                UICtrol.Invoke(OnInvokedUI, state);
            }
        }
        public static void Invoke(InvokeHandlerUI rh, T state, System.Windows.Forms.Control ctl)
        {
            ctl.Invoke(rh, state);
        }
    }
    public class InvokeHandler
    {
        public delegate void InvokeOneHandlerUI<T>(T obj);     //接收处理，涉及UI
        public delegate void InvokeTwoHandlerUI<T, U>(T obj, U obj2);     //接收处理，涉及UI
        public delegate void InvokeThreeHandlerUI<T, U, V>(T obj, U obj2, V obj3);     //接收处理，涉及UI
        public static void Invoke<T>(InvokeOneHandlerUI<T> rh, T state, System.Windows.Forms.Control ctl)
        {
            ctl.Invoke(rh, state);
        }
        public static void Invoke<T,U>(InvokeTwoHandlerUI<T,U> rh, T state,U State2, System.Windows.Forms.Control ctl)
        {
            ctl.Invoke(rh, state,State2);
        }
        public static void Invoke<T, U, V>(InvokeThreeHandlerUI<T, U, V> rh, T state, U State2, V State3, System.Windows.Forms.Control ctl)
        {
            ctl.Invoke(rh, state,State2,State3);
        }
    }
}
